package com.rw.coco.expression.parser.element.enumeration;

import java.util.Comparator;
import java.util.List;

/**
 * 排序类型
 */
public enum Sort {
    /**
     * 不进行排序，筛选
     */
    NONE,

    /**
     * 正序
     */
    ASC,

    /**
     * 倒序
     */
    DESC;

    public static Sort of(String sortStr) {
        if ("k".equalsIgnoreCase(sortStr)) {
            return DESC;
        }
        if ("q".equalsIgnoreCase(sortStr)) {
            return ASC;
        }

        return NONE;
    }

    /**
     * 根据结果列表和limit，计算最终结果
     *
     * @param resultList 结果列表
     * @param limit      计算前几个之和
     * @return 最终结果
     */
    public int sum(List<Integer> resultList, int limit) {
        return resultList.stream()
                .sorted(comparator())
                .limit(limit)
                .mapToInt(Integer::intValue)
                .sum();
    }

    /**
     * 获取正序，倒序比较器
     */
    public Comparator<Integer> comparator() {
        switch (this) {
            case NONE:
                return (left, right) -> 0;
            case ASC:
                return Comparator.naturalOrder();
            default:
                return Comparator.reverseOrder();
        }
    }
}
